define(['Datepicker'],function(){
	var NumberInput=function (initConfig){
		initConfig=$.getDefined(initConfig,{});

		var numberInput=this;
		numberInput.config={
			value:0,
			minValue:$.getDefined(initConfig.minValue,false),
			maxValue:$.getDefined(initConfig.maxValue,false)
		};

		numberInput.$input=$('<input type="text" class="form-control"/>');
		numberInput.$dom=numberInput.$input;
		if(initConfig){
			if(initConfig.inputStyle){
				numberInput.$input.css(initConfig.inputStyle);
			}
			if(initConfig.dataTips){
				numberInput.$input.attr('data-tips',initConfig.dataTips).val(initConfig.dataTips);
			}
		}



		numberInput.value=function(newValueStr){
			if(newValueStr===undefined){
				return numberInput.config.value;
			}else{
				numberInput.config.value=$.parseInt(newValueStr);
				numberInput.$input.val(numberInput.config.value);
				return numberInput;
			}
		}
		numberInput.minValue=function(newValueStr){
			if(newValueStr===undefined){
				return numberInput.config.minValue;
			}else{
				numberInput.config.minValue=newValueStr;
				numberInput.$input.attr('data-minvalue',numberInput.config.minValue);
				return numberInput;
			}
		}
		numberInput.maxValue=function(newValueStr){
			if(newValueStr===undefined){
				return numberInput.config.maxValue;
			}else{
				numberInput.config.maxValue=newValueStr;
				numberInput.$input.attr('data-maxvalue',numberInput.config.maxValue);
				return numberInput;
			}
		}
		numberInput.value(initConfig.defValue);
		numberInput.minValue(initConfig.minValue);
		numberInput.maxValue(initConfig.maxValue);

		numberInput.$input.prop('readonly',numberInput.config.readonly);


		function keyInputNumberCheck(){
			var inputValue=numberInput.$input.value();
			var inputValueParseInt=$.parseInt(inputValue);
			if(numberInput.config.minValue!==false && inputValueParseInt<numberInput.config.minValue){
				inputValueParseInt=numberInput.config.minValue
			}
			if(numberInput.config.maxValue!==false && inputValueParseInt>numberInput.config.maxValue){
				inputValueParseInt=numberInput.config.maxValue
			}
			numberInput.config.value=inputValueParseInt;
			if(inputValue!==inputValueParseInt+''){
				numberInput.$input.val(inputValueParseInt);
			}
		}

		numberInput.$input.on('change',function(){
			keyInputNumberCheck();
		})

	}
	window.NumberInput = NumberInput;
	return NumberInput;
})
